
import java.util.Scanner;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author alex
 */
public class tarea3
{
    public static void main(String[] args)
    {
        if(args.length < 3){  // verifica minima cantidad de parametros
            System.out.println("Paso de parametros incorrecto");
            System.out.println("Ejemplo: java tarea3 n --version v [-v] [-o \"filename.dat\"] < entrada \n");
            System.exit(0);
        }
        
       int N = Integer.parseInt(args[0]); // cantidad de elementos en unidades 2¹⁰ = 1
       N = (int)Math.pow(2, 9+N); 
       
       String filename = "output.dat";
       String version = "";
       boolean verbose = false;
       HeapSort heap = null;
       
       // se recogen valores pasados al momento de la ejecucion
        for(int i=1; i<args.length; i++) {
            switch (args[i]) {
                case "--version":
                    version = args[i+1];
                    break;
                case "-o":
                    filename = args[i+1];
                    break;
                case "-v":
                    verbose = true;
                    break;
            }
        }
       
       switch(version){  // version de HeapSort
           case "S":
               heap = new HeapSortS(N, filename);
               break;
           case "F":
               heap = new HeapSortF(N, filename);
               break;
           case "W":
               heap = new HeapSortW(N, filename);
               break;
           case "FW":
               heap = new HeapSortFW(N, filename);
               break;
       }
       
       Scanner in = new Scanner(System.in);
       int read[] = new int[N];  // arreglo a ordenar
       int i = 0;
       while(in.hasNextInt() && i<N)  // mientras queden elementos y en el arreglo queden espacios
       {
           read[i] = in.nextInt();
           i++;
       }
       
       long tiempoInicial = System.currentTimeMillis();
       heap.buildHeap(read);
       long tiempoFinal = System.currentTimeMillis();
       
       mostrarTiempoTranscurrido(tiempoInicial, tiempoFinal);
       System.out.println("comparaciones: " + heap.getKeyComparisons());
       heap.printer();
    }
    
    private static void mostrarTiempoTranscurrido( long tiempoInicial, long tiempoFinal ) {
        long transcurrido = tiempoFinal - tiempoInicial;   // tiempo en milisegundos
        long horas = transcurrido / 3600000;
        long restoHoras = transcurrido % 3600000;
        long minutos = restoHoras / 60000;
        long restoMinutos = restoHoras % 60000;
        long segundos = restoMinutos / 1000;
        long restoSegundos = restoMinutos % 1000;
        
        System.out.println ( "Tiempo: " + horas + ":" + minutos + ":" + segundos + "." + restoSegundos );
    }
}
